package algo3.algothief.modelo;

import org.w3c.dom.Document;
import org.w3c.dom.Element;


public class LugarDePais {

	private static String stringCaracteristico = "LugarDePais";
	
	protected Pista pista;
	protected Integer cantidadDeVecesQueSeEntro;
	
	private static int horasQueSeTardanEnEntrarAUnEdificio = 1;
	private static int horasQueSeTardanPorObtenerLaPista = 0;
	
//-------------------------------------------------------------------------------------
	
	public LugarDePais() {
		this.pista = new Pista(
			"No conozco a nadie con esa descripcion.", 
			"Nunca he visto a alguien asi.", 
			"No se de quien hablas."
		);
		this.cantidadDeVecesQueSeEntro = 0;
	}
	
//-------------------------------------------------------------------------------------
	
	// La descripcion extra es para saber a que pais se refiere dentro del archivo.
	
	// La forma de serializar esta escrita lo mas generica posible.
	public Element serializar(Document doc, String descripcionExtra) {
		Element elementoLugar = doc.createElement("LugarDePais" + descripcionExtra);
		elementoLugar.setAttribute("tipoDeLugar", LugarDePais.verStringCaracteristico());
		
		Element elementoPista = pista.serializar(doc, descripcionExtra);
	
		Element elementoCantidadDeEntradas = doc.createElement("CantidadDeVecesQueSeEntro");
		elementoCantidadDeEntradas.setAttribute("cantidad", cantidadDeVecesQueSeEntro.toString());
		
		elementoLugar.appendChild(elementoPista);
		elementoLugar.appendChild(elementoCantidadDeEntradas);
						
		return elementoLugar;
	}
		
	public static LugarDePais hidratar(Document doc, String descripcionExtra) {
		Element elementoLugar = (Element)doc.getElementsByTagName("LugarDePais" + descripcionExtra).item(0);
		String stringCaracteristicoNuevo = elementoLugar.getAttribute("tipoDeLugar");
		if (!stringCaracteristico.matches(stringCaracteristicoNuevo)) 
			return EsconditeDeLadron.hidratar(doc, descripcionExtra);
		
		Pista pistaNueva = Pista.hidratar(doc, descripcionExtra);
		
		Element elementoCantidadDeEntradas = (Element)elementoLugar.getElementsByTagName("CantidadDeVecesQueSeEntro").item(0);
		String cantidadDeEntradasEnFormaDeString = elementoCantidadDeEntradas.getAttribute("cantidad");
		int cantidadDeEntradas = Integer.parseInt(cantidadDeEntradasEnFormaDeString);
		
		LugarDePais lugarNuevo = new LugarDePais();
		lugarNuevo.modificarPista(pistaNueva);
		lugarNuevo.definirCantidadDeVecesQueSeEntro(cantidadDeEntradas);
				
		return lugarNuevo;
	}
	
//-------------------------------------------------------------------------------------

	private void definirCantidadDeVecesQueSeEntro(int cantidadDeEntradas) {
		this.cantidadDeVecesQueSeEntro = cantidadDeEntradas;
	}
	
	
	
	private static String verStringCaracteristico() {
		return stringCaracteristico;
	}
	
//-------------------------------------------------------------------------------------
	
	public int verElTiempoTranscurridoPorEntrarAlLugar() {
		return (horasQueSeTardanEnEntrarAUnEdificio * cantidadDeVecesQueSeEntro);
	}
	
	public int verElTiempoTranscurridoPorObtenerLaPista() {
		return (horasQueSeTardanPorObtenerLaPista);
	}
	
	
	public String verPistaSegunRango(RangoNovato rango) {
		this.cantidadDeVecesQueSeEntro++;
		return pista.obtenerPistaFacil();
	}
  
	public String verPistaSegunRango(RangoDetective rango) {
		this.cantidadDeVecesQueSeEntro++;
		return pista.obtenerPistaMedia();
	}
  
	public String verPistaSegunRango(RangoInvestigador rango) {
		this.cantidadDeVecesQueSeEntro++;
		return pista.obtenerPistaDificil();
	}
  
	public String verPistaSegunRango(RangoSargento rango) {
		this.cantidadDeVecesQueSeEntro++;
		return pista.obtenerPistaDificil();
	}
	

	public Pista verPista() {
		return this.pista;
	}
	
	public void modificarPista(Pista pistaNueva) {
		this.pista = pistaNueva;
	}
}
